package base_grammar

import "fmt"

func struct_f3() {
	// 结构体指针
	type Person struct {
		id   int
		name string
	}
	var tom = Person{1, "tom"}
	var bob *Person
	bob = &tom
	fmt.Printf("tom: %v\n", tom)
	fmt.Printf("bob: %p\n", bob)
	fmt.Printf("*bob: %v\n", *bob)
	kite := new(Person)
	fmt.Printf("kite: %T\n", kite)
	// 等同于 kite.id=222 简写  自动解引用
	(*kite).id = 222
	kite.name = "kite"
	fmt.Printf("kite: %v\n", kite)
	fmt.Printf("kite: %v\n", *kite)
}

func struct_f2() {
	type Person struct {
		id, age     int
		name, email string
	}
	var tom Person
	fmt.Printf("tom: %v\n", tom)
	kite := Person{
		id:    1,
		age:   20,
		name:  "kite",
		email: "kite@qq.com",
	}
	fmt.Printf("kite: %v\n", kite)
	/*
		必须初始化结构体的所有字段。
		初始值的填充顺序必须与字段在结构体中的声明顺序一致。
		该方式不能和键值初始化方式混用。
	*/
	bob := Person{
		2, 100, "bob", "bob@qq.com",
	}
	fmt.Printf("bob: %v\n", bob)

	luffy := Person{
		id:  3,
		age: 20,
	}
	fmt.Printf("luffy: %v\n", luffy)
}
